/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Prolog;

import Ajedrez.Ajedrez;
import Ajedrez.Posicion;
import Herramientas.Conversor;
import Herramientas.Tarea;
import java.util.Enumeration;
import java.util.Hashtable;
import jpl.*;



/**
 *
 * @author Carlos
 */
public class ComunicadorProlog {
    private Ajedrez aj;

    
    public ComunicadorProlog(Ajedrez aj) {
        this.aj = aj;
        Query q1 = new Query("consult('C:/Users/Carlos Martínez Rey/Desktop/AJEDREZ/principal.pl')");
        System.out.println( "Conectado con prolog... " + (q1.hasSolution() ? "succeeded" : "failed") );
        //q1.close();
    }
    
    public boolean enviarMovimiento(String s){
        System.out.println("Se va a consultar: "+s);
        Query q = new Query(s);
        // Si el movimiento enviado no es válido, devuelve false.
        // Si el movimiento enviade sí es válido, devuelve true.
        boolean res = q.hasSolution();
        System.out.println("Resultado envío: "+res);
        return res;
        //System.out.println( "Resultado... " + (q.hasSolution() ? "succeeded" : "failed") );
        //q.close();
        // Aquí habría que poner un if el resultado es false, el movimiento no es válido y hay que volver atrás.
    }
    
    public boolean consultarMovimiento(){
        String consulta = "playPosition(P,X,Y,M,E)";
        System.out.println("Consulta: "+consulta);
        Query q = new Query(consulta);

        //Si se pone "q.hasSolution()" se salta la solución!!!!!!!!!!!!
        java.util.Hashtable sol = q.oneSolution();
        if(sol != null){
            String pieza = (String) sol.get("P").toString();
            String letra = (String) sol.get("X").toString();
            String numero = (String) sol.get("Y").toString();
            String mate = (String) sol.get("M").toString();
            String explicacion = (String) sol.get("E").toString();
            System.out.println("Movimiento: "+pieza+" a "+letra+"-"+numero+": Mate = "+mate);
            System.out.println("Explicación: "+explicacion);
            Posicion origen = aj.buscarPiezaEnTablero(pieza);
            Posicion destino = new Posicion(8-java.lang.Integer.valueOf(numero),Conversor.letraToIntCol(letra));
            aj.informar(Tarea.EXPLICACION, explicacion);
            aj.Turno(origen);
            aj.Turno(destino);
            if(Boolean.parseBoolean(mate))
                aj.informar(Tarea.FIN_PARTIDA);
            q.close();
            return true;
        }
        return false;
    }

}
